#ifndef __M_UTIL_H__
#define __M_UTIL_H__
// 实用工具类实现
// 1.获取系统时间
// 2.判断文件是否存在
// 3.获取文件所在路径
// 4.创建目录
#include <iostream>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
namespace log
{
    namespace util
    {
        class Date
        {
        public:
            static size_t now()
            {
                return (size_t)time(nullptr);
            }
        };
        class File
        {
        public:
            static bool exists(const std::string &pathname)
            {
                struct stat st;
                if (stat(pathname.c_str(), &st) < 0)
                {
                    return false;
                }
                return true;
            }
            static std::string path(const std::string &pathname)
            {
                // ./abc/a.txt  --->  ./abc/
                size_t pos = pathname.find_last_of("/\\"); // 这里是为了在window和linux中通用，意为查找"/"或者"\"
                if (pos == std::string::npos)
                    return "."; // 给我传入的是文件名
                return pathname.substr(0, pos + 1);
            }
            static void createdirectory(const std::string &pathname)
            {
                // 可能给我传入的是这种路径要我创建文件夹  ./abc/bcd/cde
                size_t pos = 0, idx = 0;
                while (idx < pathname.size())
                {
                    pos = pathname.find_first_of("/\\", idx);
                    if (pos == std::string::npos) // 这里意思是直接创建cde文件夹
                    {
                        mkdir(pathname.c_str(), 0777); // 这是系统调用接口
                    }
                    std::string parent_dir = pathname.substr(0, pos + 1);
                    if (exists(parent_dir) == true)
                    {
                        idx=pos+1;
                        continue;
                    }
                    mkdir(parent_dir.c_str(),0777);
                    idx=pos+1;
                }
            }
        };
    }
}
#endif